﻿/*
 				________________________________COPYRIGHT_______________________________________
				Die Veröffentlichung dieses Objektes ist Illegal und wird strafrechtlich verfolgt
				werden. Sollte es zu einer Veröffentlichung kommen werden wir die Daten des
				Herrausgebers fündig machen und Anzeige erstatten. Desweiteren ist
				auch jeglicher Besitz dieses Objektes Illegal und kann ebenfalls als Grund für
				eine Anzeige verwendet werden.
				Ausnahmen der veröffentlichung und verleihung gelten nur wenn der Grundbesitzer
				diese durchführt.
				Die Uhrheberrechte dieses Objektes liegen der Entwickler Gruppe CyberScripting vor. 
                © 2011.
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace cubeworld
{
    [Serializable]
    public class Block
    {
        private string _name;
        private int _id;
        private int _textureId;
        private float _resistance;
        private BoundingBox _box;
        private Vector3 _position;
        private bool _deleted;

        public bool visible = true;

        public bool isDeleted
        {
            get { return this._deleted; }
        }

        public virtual void delete()
        {
            this._deleted = true;
        }

        public string Name                           // Nur lesbar
        {
            get { return this._name; }
        }
        public int ID                                // Nur lesbar
        {
            get { return this._id; }
        }
        public float Resistance                      // Les- und schreibbar
        {
            get { return this._resistance; }
            set { Resistance = value; }
        }
        public int TextureID
        {
            get
            {
                return _textureId; 
            }
        }
        public BoundingBox BoundingBox
        {
            get { return _box; }
        }
        public Vector3 Position
        {
            get { return _position; }
        }
        public void makeDamage(float damage)
        {
            this._resistance -= damage;
            if (this._resistance <= 0.0f)
                this.delete();
        }

        public Block(string name, int id, int textureId, Vector3 p, float resistance = 1.0f)
        {
            this._name = name;                      //Setzt den Namen des Blocks für das Inventar 
            this._id = id;                          //Zur besseren Identifizierung
            this._textureId = textureId;            //Texture-ID des Blocks
            this._resistance = resistance;          //Härte des Blocks

            this._box = new BoundingBox(new Vector3(-0.5f, -0.5f, -0.5f), new Vector3(0.5f, 0.5f, 0.5f));
            _position = p;
        }

        public virtual void Draw()
        {
            if(visible)
                Data.cubeModel.DrawCubeModel(_position, _textureId);
        }
    }
}
